package net.sansi.v3correctserver.util;

import java.util.Comparator;
import java.util.PriorityQueue;

/**
 * Created by Fang
 * create time : 2024/11/6
 * IDE : IntelliJ IDEA
 * <p>
 * 单调工具类
 */

public class MonotoneUtil<T> {

    // 使用优先队列实现单调队列
    private final PriorityQueue<T> queue;
    // 队列大小
    private final int size;

    /**
     * 构造函数
     *
     * @param size       队列大小
     * @param comparator 比较器
     */
    public MonotoneUtil(int size, Comparator<T> comparator) {
        this.size = size;
        queue = new PriorityQueue<>(size + 1, comparator.reversed());
    }

    /**
     * 添加元数
     *
     * @param item 元素
     */
    public void add(T item) {
        queue.offer(item);
        if (queue.size() > size) {
            queue.poll();
        }
    }

    /**
     * 获取
     *
     * @return 元素
     */
    public T get() {
        return queue.peek();
    }
}
